#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>

int main()
{
	
//	int fd =open("log.txt",O_RDONLY);
//	dup2(fd,0);
//
//	char buffer[2048];
//	size_t s=read(0,buffer,sizeof(buffer));
//	if(s>0)
//	{
//		buffer[s]=0;
//		printf("stdin redir:\n%s\n",buffer);
//	}



//	int fd = open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0666);
//
//	dup2(fd,1); //重定向：往显示器(1)上打印的内容都会打印到文件(fd)里
//
//	printf("hello fd:%d\n",fd);
//	fprintf(stdout,"hello fd:%d\n",fd);
//	fputs("hello world\n",stdout);
//	const char* message="hello fwrite!\n";
//	fwrite(message,1,strlen(message),stdout);

//	close(fd);

	close(1);  //close 0，2可以   1不可以  因为把文件描述符1 关了 write不到OS中去
	int fd1=open("log.txt",O_WRONLY | O_CREAT | O_TRUNC,0666); 	
        printf("fd1:%d\n",fd1);
	fprintf(stdout,"helloworld\n");
//	fflush(stdout);
	//close(fd1);   系统调用刷不出来
        fclose(stdout);  //C封装的fclose可以刷出来



//	char buffer[128];
//	ssize_t s = read(0,buffer,sizeof(buffer)); //返回值s 表示 实际读到了多少字节
//	if(s>0)
//	{
//		buffer[s]=0;  //把最后一个置为 \0
//		printf("%s\n",buffer);
//	}
//
//	const char* message ="hello write\n";
//	write(1,message,strlen(message));

////	umask(0);
//	int fd1=open("log.txt1",O_WRONLY | O_CREAT | O_TRUNC,0666); // 写入  但是linux这里 写入不同于C语言 如果没有文件不会自己创建  所以要加上 |O_CREAT     存在就清空 O_TRUNC
//	int fd2=open("log.txt2",O_WRONLY | O_CREAT | O_TRUNC,0666);
//	int fd3=open("log.txt3",O_WRONLY | O_CREAT | O_TRUNC,0666);
//	int fd4=open("log.txt4",O_WRONLY | O_CREAT | O_TRUNC,0666);
//	if(fd1<0)
//	{
//		perror("open");
//		return 1;
//	}
//	printf("fd1:%d\n",fd1);
//	printf("fd2:%d\n",fd2);
//	printf("fd3:%d\n",fd3);
//	printf("fd4:%d\n",fd4);
//
//	const char* message = "aaa";
//	write(fd1,message,strlen(message));
//
//	close(fd1);
	return 0;
}





















//#define ONE (1<<0)
//#define TWO (1<<1)
//#define THREE (1<<2)
//#define FOUR (1<<3)
//#define FIVE (1<<4)
//
//
////code 1
//void PrintTest(int flags)
//{
//    if(flags & ONE)
//    {
//        printf("one\n");
//    }
//    if(flags & TWO)
//    {
//        printf("two\n");
//    }
//    if(flags & THREE)
//    {
//        printf("three\n");
//    }
//    if(flags & FOUR)
//    {
//        printf("four\n");
//    }
//    if(flags & FIVE)
//    {
//        printf("five\n");
//    }
//}
//
//int main()
//{
//    printf("===========================\n");
//    PrintTest(ONE);
//    printf("===========================\n");
//    PrintTest(TWO);
//    printf("===========================\n");
//    PrintTest(THREE);
//    printf("===========================\n");
//    PrintTest(ONE | THREE);
//    printf("===========================\n");
//    PrintTest(ONE | TWO | THREE);
//    printf("===========================\n");
//    PrintTest(ONE | TWO | THREE | FOUR);
//    printf("===========================\n");
//    return 0;
//}

	

